package indi.imooc.algorithm.linearsearch;

import indi.utils.ArrayGeneratorUtil;

/**
 * 线性查找
 */
public class LineraSerach {

    private LineraSerach(){}

    /**
     * v1.0
     * @param data
     * @param target
     * @return
     */
//    public static int search(int[] data, int target){
//        for (int i = 0; i < data.length; i++){
//            if(data[i] == target){
//                return i;
//            }
//        }
//        return -1;
//    }

    /**
     * v2.0
     * 更新 : 使用泛型
     * 注意 : 使用equals判断而不是==;并且自定义类需要重写equals方法
     * @param data
     * @param target
     * @return
     */
    public static <E> int search(E[] data, E target){
        for (int i = 0; i < data.length; i++){
            if(data[i].equals(target)){
                return i;
            }
        }
        return -1;
    }


    public static void main(String[] args) {
//        Integer[] arr = {3,4,56,12,85};
//        int res = search(arr,4);
//        System.out.println(res);
//        List<Integer> list = toBinary(7);
//        System.out.println(list);

        Integer[] arr = {100_0000,1000_0000};
        for(int n : arr){
            Integer[] testArr = ArrayGeneratorUtil.generateOrderedArray(n);
            long startTime = System.nanoTime();
            int k = 100;
            for (int i = 0; i < k; i++){
                search(testArr,n);
            }
            long endTime = System.nanoTime();
            System.out.println("n : " + n + "; runs : " + k + "; times :" + (endTime - startTime)/1000_000_000.0);
        }

    }
}
